﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TicketsPhone.Domain.Entities;
using System.Data;

namespace TicketsPhone.Domain.Access
{
    public class TramiteRepositorio : ConexionSql<Tramite>, ICrud<Tramite>
    {

        public int Crear()
        {
            CrearComando("spTramite_Crear");
            AgregarParametros();
            return Convert.ToInt32(ExecuteScalar());
        }

        public bool Editar()
        {
            CrearComando("spTramite_Editar");
            AgregarParametros();
            return ExecuteNonQuery() > 0;
        }

        public bool Eliminar(int id)
        {
            CrearComando("spTramite_Eliminar");
            AgregarParametro("@IdTramite", id, ParameterDirection.Input, DbType.Int32);
            return ExecuteNonQuery() > 0;
        }

        public Tramite Cargar(int id)
        {
            Tramite objeto = new Tramite();
            CrearComando("spTramite_Cargar");
            AgregarParametro("@IdTramite", id, System.Data.ParameterDirection.Input, System.Data.DbType.Int32);
            ExecuteReader();

            while (Read())
            {
                objeto = new Tramite(GetDataReader());
            }

            return objeto;
        }

        public List<Tramite> ObtenerTodos()
        {
            throw new NotImplementedException();
        }

        public List<Tramite> Filtrar()
        {
            List<Tramite> lista = new List<Tramite>();
            CrearComando("spTramite_Filtrar");
            AgregarParametro("@Nombre", Objeto.Nombre, System.Data.ParameterDirection.Input, System.Data.DbType.String);
            ExecuteReader();

            while (Read())
            {
                lista.Add(new Tramite(GetDataReader()));
            }

            return lista;
        }

        private void AgregarParametros()
        {
            AgregarParametro("@IdTramite", Objeto.IdTramite, ParameterDirection.Input, DbType.Int32);
            AgregarParametro("@Nombre", Objeto.Nombre, ParameterDirection.Input, DbType.String);
            AgregarParametro("@Descripcion", Objeto.Descripcion, ParameterDirection.Input, DbType.String);
            AgregarParametro("@Requisitos", Objeto.Requisitos, ParameterDirection.Input, DbType.String);
            AgregarParametro("@Duracion", Objeto.Duracion, ParameterDirection.Input, DbType.Int32);
            AgregarParametro("@IdEntidad", Objeto.Entidad.IdEntidad, ParameterDirection.Input, DbType.Int32);
            AgregarParametro("@Activo", Objeto.Activo, ParameterDirection.Input, DbType.Boolean);
            AgregarParametro("@FechaModificacion", Objeto.FechaModificacion, ParameterDirection.Input, DbType.DateTime);
        }
    }
}
